/*******************************************************************************
 ** Name: common.cpp                                                          **
 ** Description:              **
 **                                                                           **
 ** Open Source Initiative (OSI) Approved License                             **
 **                                                                           **
 ** The contents of this file are subject to the terms of the                 **
 ** Common Development and Distribution License, Version 1.0 only             **
 ** (the "License").  You may not use this file except in compliance          **
 ** with the License.                                                         **
 **                                                                           **
 ** You can find a copy of the license in the license.txt within              **
 ** this distribution or at http://www.munixos.net/licensing.                 **
 ** Software distributed under the License is distributed on an "AS IS"       **
 ** basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.           **
 ** See the License for the specific language governing permissions           **
 ** and limitations under the License.                                        **
 **                                                                           **
 ** When distributing Covered Code, include this CDDL header in each          **
 ** file and include the License file at $HOME/license.txt.                   **
 ** If applicable, add the following below this header, with the indicated    **
 ** fields enclosed by brackets "[]" replaced with your own identifying       **
 ** information: Portions Copyright [yyyy] [name of copyright owner]          **
 **                                                                           **
 **                                                                           **
 ** Copyright (c) 2009-2010  Barry Gian James <bjames@munixos.net>            **
 ** All rights reserved.                                                      **
 **                                                                           **
 ** Ref: $HeadURL$
 ******************************************************************************/
// Portions (C) 2011-12 Open Design Strategies, LLC.
// All Rights Reserved

// $Id$
// Last Modified $DateTime$ by $Author$


#include "common.h"
#include <stdlib.h>

#ifdef __cplusplus

void __cxa_pure_virtual() { while(1); }

#if !defined(NO_THREADSAFE_STATICS)
int 	__cxa_guard_acquire(__guard *g) { return !*(char*)(g); }
void	__cxa_guard_release(__guard *g) { *(char*)g = 1; }
void	__cxa_guard_abort(__guard *g) { }
#endif

#if !defined(USE_MEM_MGMT)
extern void *malloc(size_t __size) __ATTR_MALLOC__;

void * operator new(size_t size)
{
	return malloc(size);
}
// Placement new default
void * operator new(size_t, void *p)
{
	return p;
}

void * operator new [] (size_t size)
{
	return malloc(size);
}

void operator delete(void * ptr)
{
	if (ptr)
		free(ptr);
}

void operator delete [] (void * ptr)
{
	if (ptr)
		free(ptr);
}

void operator delete(void * p, void * const b)
{

}
#endif /* !defined(USE_MEM_MGMT) */

// Stolen from Tab.cpp @ COCO/R source by Hanspeter Moessenboeck
char    Hex2Char(const char* s) {
    int val = 0;
    int len = strlen(s);
    for (int i = 0; i < len; i++) {
        wchar_t ch = s[i];
        if ('0' <= ch && ch <= '9') val = 16 * val + (ch - '0');
        else if ('a' <= ch && ch <= 'f') val = 16 * val + (10 + ch - 'a');
        else if ('A' <= ch && ch <= 'F') val = 16 * val + (10 + ch - 'A');
        else {
            ;
        }
    }
    if (val >= 3) {/* pdt */
        ;
    }
    return (char) val;
}

char*   Char2Hex(const char ch) {
    char* format = new char[10];
    sprintf(format, "0x%04x", ch);
    return format;
}


#endif  /* _MUNIX_COMMON_H_ */
